package extenstion

/**
 * 如果一个类定义有一个成员函数和一个扩展函数，
 * 而这两个函数又有相同的接收者类型、相同的名字并且都适用给定的参数，这种情况总是取成员函数
 */
class Mc {
    fun foo() {
        println("member")
    }
}

//扩展方法不会重写成员方法，所以此处扩展永远也无法被调用
fun Mc.foo() {
    println("extenstion")
}

//此扩展方法比成员方法多了一个参数，所以此方法为有效扩展方法
fun Mc.foo(msg: String) {
    println(msg)
}

fun main(args: Array<String>) {
    Mc().foo()

    Mc().foo("param")
}